"""
人脸识别项目主程序入口
"""

import os
import sys
import argparse
import numpy as np

# 添加src目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

from modules.face_detection import detect_faces, detect_faces_in_video
from modules.face_features import extract_face_features
from modules.face_matching import compare_faces, recognize_face
from modules.face_database import add_face_to_database, remove_face_from_database, list_faces_in_database
from modules.compreface_manager import ComprefaceManager
from config.api_config import APIConfigManager
from utils.data_storage import save_face_database, load_face_database
from api.web_api import create_api_server


def main():
    """主函数"""
    parser = argparse.ArgumentParser(description='人脸识别系统')
    parser.add_argument('--mode', choices=['detect', 'recognize', 'add', 'remove', 'list', 'api', 'video'], 
                        default='detect', help='运行模式')
    parser.add_argument('--image', help='图像文件路径')
    parser.add_argument('--name', help='人员姓名')
    parser.add_argument('--database', default='data/face_database.json', help='人脸数据库文件路径')
    parser.add_argument('--host', default='127.0.0.1', help='API服务器主机地址')
    parser.add_argument('--port', type=int, default=5000, help='API服务器端口')
    
    args = parser.parse_args()
    
    # 加载人脸数据库
    face_database = load_face_database(args.database)
    
    if args.mode == 'detect':
        if not args.image:
            print("请提供图像文件路径")
            return
        
        # 人脸检测
        face_locations = detect_faces(args.image)
        print(f"检测到 {len(face_locations)} 个人脸:")
        for i, (top, right, bottom, left) in enumerate(face_locations):
            print(f"  人脸 {i+1}: 上={top}, 右={right}, 下={bottom}, 左={left}")
    
    elif args.mode == 'recognize':
        if not args.image:
            print("请提供图像文件路径")
            return
        
        # 人脸识别
        face_encodings = extract_face_features(args.image)
        if len(face_encodings) == 0:
            print("未检测到人脸")
            return
        
        print(f"检测到 {len(face_encodings)} 个人脸:")
        for i, encoding in enumerate(face_encodings):
            name, confidence = recognize_face(encoding, face_database)
            print(f"  人脸 {i+1}: {name} (置信度: {confidence:.2f})")
    
    elif args.mode == 'add':
        if not args.name or not args.image:
            print("请提供人员姓名和图像文件路径")
            return
        
        # 添加人脸到数据库
        if add_face_to_database(args.name, args.image, face_database):
            # 保存数据库
            if save_face_database(face_database, args.database):
                print(f"成功添加 {args.name} 到人脸数据库")
            else:
                print("保存数据库失败")
        else:
            print("添加人脸失败")
    
    elif args.mode == 'remove':
        if not args.name:
            print("请提供要删除的人员姓名")
            return
        
        # 从数据库删除人脸
        if remove_face_from_database(args.name, face_database):
            # 保存数据库
            if save_face_database(face_database, args.database):
                print(f"成功从人脸数据库删除 {args.name}")
            else:
                print("保存数据库失败")
        else:
            print("删除人脸失败")
    
    elif args.mode == 'list':
        # 列出数据库中所有人脸
        faces = list_faces_in_database(face_database)
        print("人脸数据库中的人员:")
        for name in faces:
            print(f"  - {name}")
    
    elif args.mode == 'api':
        # 启动Web API服务
        app = create_api_server()
        print(f"启动API服务器: http://{args.host}:{args.port}")
        app.run(host=args.host, port=args.port, debug=True)
    
    elif args.mode == 'video':
        # 实时视频人脸检测
        detect_faces_in_video()


if __name__ == "__main__":
    main()